package com.play2gether;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import static com.play2gether.Conexiones.verificaConexion;


public class loginActivity extends ActionBarActivity implements View.OnClickListener {

    private DataBaseManager     manager;

    public  TextView        textEmail;
    public  TextView        textPassword;
    public  Button          btLogin;
    public  Button          btRegistrar;
    public  Button          btRecordar;

    public Boolean          hayConexion;
    public String[]         datos;
    public String url;
    public SharedPreferences preferencias;
    public String            id;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        url   = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/login";
        manager = new DataBaseManager(this);
        hayConexion = verificaConexion(this);

        configurarNavbar();
        configurarVista();

        /*
        if (hayConexion){ Toast.makeText(getApplicationContext(),"Estas conectado", Toast.LENGTH_SHORT).show(); }
        else            { Toast.makeText(getApplicationContext(),"No hay conexión", Toast.LENGTH_SHORT).show(); }
        */

    }
    private void configurarVista(){
        textEmail    = (TextView) findViewById(R.id.inputLogin);
        textPassword = (TextView) findViewById(R.id.inputPassword);
        btLogin      = (Button)   findViewById(R.id.btLogin);
        btRegistrar  = (Button)   findViewById(R.id.btCuentaNueva);
        btRecordar   = (Button)   findViewById(R.id.btOlvidado);

        btLogin.setOnClickListener(this);
        btRegistrar.setOnClickListener(this);
        btRecordar.setOnClickListener(this);
    }

    private void configurarNavbar(){
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);

        Button btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        Button btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        Button btOpcionesNV   = (Button) findViewById(R.id.btOpcionesNV);
        Button btAtras        = (Button) findViewById(R.id.bt_atras);
        Button btSincronizar  = (Button) findViewById(R.id.bt_sincronizar);

        btFormularioNV.setAlpha(0);
        btSugerenciaNV.setAlpha(0);
        btAtras.setAlpha(0);
        btSincronizar.setAlpha(0);
        btOpcionesNV.setAlpha(0);

        TextView tituloNav = (TextView) findViewById(R.id.tituloLayout);
        tituloNav.setText("Login");
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu_opciones; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        datos    = new String[2];
        datos[0] = textEmail.getText().toString();
        datos[1] = textPassword.getText().toString();
        switch (v.getId()){
            case R.id.btLogin:
                //saltarLogeo();

                if(verificaConexion(this)){
                    try                 { new Logear().execute();  }
                    catch (Exception e) { e.printStackTrace();
                                          Log.e("ERROR", e.getMessage());
                    }
                }else {
                    if (manager.HacerLogin(datos[0], datos[1])) {
                        Toast.makeText(getApplicationContext(), "Correcto", Toast.LENGTH_SHORT).show();
                        guardarSesion("1");
                        Intent intent = new Intent(loginActivity.this,MenuPrincipalActivity.class);
                        finish();
                        startActivity(intent);
                        }
                    else { Toast.makeText(getApplicationContext(), "Login o Contraseña incorrectos", Toast.LENGTH_SHORT).show(); }
                }

                break;
            case R.id.btCuentaNueva:
                Intent intent = new Intent(loginActivity.this,registroActivity.class);
                intent.putExtra("ok","0");
                startActivity(intent);
                break;
            case R.id.btOlvidado: break;
        }
    }
    public void guardarSesion(String n){
        preferencias = getSharedPreferences("sesion", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferencias.edit();
        editor.putString("activa", n);
        editor.putString("id", id);
        editor.commit();
        //finish();
    }
    public class Logear extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute() { //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(), "Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.
            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result = "";
            InputStream is = null;
            JSONObject json = null;

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("email", datos[0]));
            params.add(new BasicNameValuePair("password", datos[1]));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();
            } catch (Exception e) {
            }

            try {
                json = new JSONObject(result);
            } catch (JSONException e) {
            }
            return json;
        }

        protected void onPostExecute(JSONObject json) {
            String estado = "";

            try {
                estado = (String) json.get("estado");
                id     = (String) json.get("id_usuario");
                if (estado.equals("ok")) {
                    if (manager.existeUsuarioEnMovil(id)){
                        //manager.crearUsuario();
                    }else{
                        //manager.actualizarDatosUsuario();
                    }

                    Toast.makeText(getApplicationContext(), "Correcto", Toast.LENGTH_SHORT).show();
                    guardarSesion("1");
                    Intent intent = new Intent(loginActivity.this,principalActivity.class);
                    finish();
                    startActivity(intent);
                } else {
                    Toast.makeText(getApplicationContext(), "Login o Contraseña incorrectos", Toast.LENGTH_SHORT).show();
                }
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(), "Error!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
    private void saltarLogeo(){
        preferencias = getSharedPreferences("sesion", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferencias.edit();
        editor.putString("activa", "1");
        editor.putString("id", "124");
        editor.commit();
        Intent intent = new Intent(loginActivity.this,principalActivity.class);
        finish();
        startActivity(intent);
    }

}
